import { chooseAddress, showModal, showToast } from '../../util/asyncWx'
Page({
  data: {
    // 用户的收获地址
    address: {},
    // 购物车的数据
    carts: [],
    // 购物车所有商品是否都选中
    allChecked: false,
    // 购物车选中总价格
    totalPrice: 0,
    // 购物车选中总数量
    totalNum: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },
  onShow() {
    // 获取缓存中的收货地址信息
    const address = wx.getStorageSync('address')
    this.setData({
      address
    })
    // 获取缓存中的购物车数据
    const carts = wx.getStorageSync('carts') || []
    // 判断购物车所有商品是否选中
    // const allChecked = carts.length?carts.every(item => item.checked) : false
    this.setCarts(carts)
  },
  // 获取收货地址信息
  async handleChooseAddress() {
    // 此处使用的 chooseAddress  是自己在 util 中封装的 promise
    const address = await chooseAddress()
    address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo
    wx.setStorageSync('address', address);
    this.setData({
      address
    })
  },
  // 单个商品选中状态改变
  handleItemChange(e) {
    // 获取被修改的商品的id
    const goods_id = e.currentTarget.dataset.id
    // 获取购物车数组
    let { carts } = this.data
    // 找到被修改的商品对象
    let index = carts.findIndex(item => item.goods_id === goods_id)
    // 选中状态取反
    carts[index].checked = !carts[index].checked
    // 将新的购物车数组 重新设置回data 和 缓存中
    this.setCarts(carts)
  },
  // 设置购物车状态同时 重新计算 底部工具栏的数据,全选,总价格,购买的数量
  setCarts(carts) {
    let allChecked = true
    // 总价格和总数量
    let totalPrice = 0
    let totalNum = 0
    carts.forEach(item => {
      if (item.checked) {
        totalPrice += item.num * item.goods_price
        totalNum++
      } else {
        allChecked = false
      }
    });
    // 判断购物车数组是否为空
    allChecked = carts.length ? allChecked : false
    // 将值 给 data 中
    this.setData({
      carts,
      allChecked,
      totalPrice,
      totalNum
    })
    wx.setStorageSync('carts', carts)
  },
  // 购物车的全选功能
  handleItemAllChange() {
    // 获取data中的数据
    let { carts, allChecked } = this.data
    // 修改全选框的 状态
    allChecked = !allChecked
    // 循环修改 购物车数组(carts)的商品选中状态
    carts.forEach(v => v.checked = allChecked)
    // 将修改后的全选框状态和商品选中状态重新给 data 中
    this.setData({
      allChecked,
      carts
    })
    this.setCarts(carts)
  },
  // 商品数量编辑功能
  async handleItemNumEdit(e) {
    // 获取传递过来的参数
    const { operation, id } = e.currentTarget.dataset
    // 获取购物车数组
    let { carts } = this.data
    // 找到需要修改的商品的索引
    const index = carts.findIndex(v => v.goods_id === id)
    // 判断是否要执行删除
    if (carts[index].num === 1 && operation === -1) {
      // 弹窗提示
      const res = await showModal({ content: "你是否要删除" })
      if (res.confirm) {
        carts.splice(index, 1)
        this.setCarts(carts)
      }
    } else {
      // 进行数量的修改
      carts[index].num += operation
      this.setCarts(carts)
    }
  },
  // 商品结算
  async handlePay() {
    const { address, totalNum } = this.data
    // 判断用户有没有选择商品
    if (totalNum === 0) {
      await showToast({ title: '您还没选购商品' })
      return;
    }
    // 判断收货地址
    if (!address.userName) {
      await showToast({ title: '您还没有选择地址' })
      return;
    }
    // 跳转到 支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    });
  }
})